# 函数并非总是直接显示输出，它还可以处理一些数据，并返回一个或一组值。
# 函数返回的值称为返回值。# 在函数中，可以使用 return 语句将值返回到调用函数的那行代码。
# 返回值让你能够将程序的大部分繁重工作移到函数中完成，从而简化主程序。

print("--------------8.3.1 返回简单的值-----------------")
def get_formatted_name(first_name, last_name):
    """返回整洁的姓名"""
    full_name = first_name + ' ' + last_name
    return full_name.title()

musician = get_formatted_name('jimi', 'hendrix')
print(musician)

print("--------------8.3.2 让实参变成可选的-----------------")
# 有时候需要让实参变成可选的，这样使用函数的人就只需在必要时提供额外的信息。
# 可使用默认值来让实参变成可选的。
def get_formatted_name(first_name, last_name, middle_name=''):
    """返回整洁的姓名"""
    if middle_name:
        full_name = first_name + ' ' + middle_name + ' ' + last_name
    else:
        full_name = first_name + ' ' + last_name
    return full_name.title()

musician = get_formatted_name('jimi', 'hendrix')
print(musician)

musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)

print("--------------8.3.3 返回字典-----------------")
def build_person(first_name, last_name):
    """返回一个字典，其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    return person

musician = build_person('jimi', 'hendrix')
print(musician)

# 扩展函数
def build_person(first_name, last_name, age=''):
    """返回一个字典，其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    if age:
        person['age'] = age
    return person

musician = build_person('jimi', 'hendrix', age=27)
print(musician)
musician = build_person('jimi', 'hendrix')
print(musician)

print("--------------8.3.4 结合使用函数和while循环-----------------")
# 结合使用函数和while循环
def get_formatted_name(first_name, last_name):
    """返回整洁的姓名"""
    full_name = first_name +'' + last_name
    return full_name.title()

# 这是一个无限循环
while True:
    print("\nPlease tell me your name:")
    print("(enter 'q' at any time to quit)")

    f_name = input("First name: ")
    if f_name == 'q':
        break

    l_name = input("Last name: ")
    if l_name == 'q':
        break

    formatted_name = get_formatted_name(f_name, l_name)
    print("\nHello, " + formatted_name + "!")
    